import pytest

####测试函数声明传参请求fixture

class Fruit:
    def __init__(self, name):
        self.name = name

    def __eq__(self, other):
        return self.name == other.name

'''
     测试函数可以使用多个fixture 
     fixture本身还可以使用其他的fixture
'''
@pytest.fixture
def my_fruit():
    # 这里是一个fixture，返回了一个Fruit对象，名字叫苹果
    return Fruit("苹果")


@pytest.fixture
def fruit_basket(my_fruit):
    # 这里是另一个fixture，同样声明一个Fruit对象，名字叫香蕉。
    # 然后在这个fixture中又传入了上一个fixture：my_fruit
    # 最后把最终的返回装到一个列表[]里，返回["香蕉","苹果"]
    return [Fruit("香蕉"), my_fruit]



#测试函数test_my_fruit_in_basket通过传入my_fruit, fruit_basket来调用这2个fixture。
#当pytest运行测试函数时，它会查看该测试函数中的参数，然后搜索与这些参数具有相同名称的fixture。
#一旦pytest找到这些对象，它就会运行这些fixture。
def test_my_fruit_in_basket(my_fruit, fruit_basket):
    # 这是一个测试函数，可以使用多个fixture
    assert my_fruit in fruit_basket